package trabalhotec.gui;

import java.beans.PropertyVetoException;
import java.text.ParseException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
// import javax.swing.text.MaskFormatter;
import java.text.SimpleDateFormat;
import javax.swing.text.MaskFormatter;
import trabalhotec.BD.DataUtil;


public class Voos extends JInternalFrame{
    trabalhotec.Negocios.Voos voo = new trabalhotec.Negocios.Voos();
    JPanel pane;
    JTable result;
    JTextField Cod;
    JTextField Codigo;
    JTextField qtdrest;
    JComboBox Origem;
    JComboBox Destino;
    JFormattedTextField Data;
    JFormattedTextField Horaemin;
    JTextField Tempodevoo;
    JTextField Preco;
    JTextField Qtdmaxpass;
    JTextField cheg;
    JTextField part;
    JTable tabela;
    //JFormattedTextField Cod;
    Vector<String> titulos;
    Vector<Vector> valores;
    
    public Voos(){

        this.setTitle("Voos");
        titulos = new Vector<String>();
        valores = new Vector<Vector>();

        titulos.add("Codigo");
        titulos.add("Origem");
        titulos.add("Destino");
        titulos.add("Data de partida");
        titulos.add("Data de chegada");
        titulos.add("Tempo de voo");
        titulos.add("Preco");
        titulos.add("Quantidade de Lugares");
        pane = new JPanel();
        pane.setLayout(new BorderLayout());
        Listarvoos();
        this.setClosable(true);
        this.setMaximizable(false);
        this.setIconifiable(true);
        this.setResizable(false);
        this.getContentPane().add(pane);
    }

    public void Listarvoos(){
        pane.removeAll();
        pane.setLayout(new BorderLayout());
        this.setTitle("teste3");
        valores = voo.listarVoo();
        Listavoos(titulos,valores);
        JButton novo = new JButton("Novo");
        JButton excluir = new JButton("Excluir");
        JButton sair = new JButton("sair");
        JPanel botoes = new JPanel();
        botoes.add(novo);
        botoes.add(excluir);
        botoes.add(sair);
        excluir.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                int selRow = tabela.getSelectedRow();  
                if(selRow == -1)JOptionPane.showMessageDialog(null, "Nenhuma linha selecionada");
                else{
                    String valor = (String) tabela.getModel().getValueAt(selRow, 0);
                    Object[] options = { "Sim", "Não" };  
                    int i = JOptionPane.showOptionDialog(null,"Tem certeza que deseja excluir?", "Saída", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);  
                    if (i == JOptionPane.YES_OPTION) {  
                        if(voo.excluirVoo(valor)){
                        JOptionPane.showMessageDialog(null, "Voo apagado com sucesso");
                        Listarvoos();
                        }else JOptionPane.showMessageDialog(null, "voo promocional, nao pode ser apagado");
                    }
                }
            }
            
        });
        sair.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    setClosed(true);
                } catch (PropertyVetoException ex) {
                    Logger.getLogger(Voos.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            
        });
        
        pane.add(botoes, BorderLayout.SOUTH);
        
            
        novo.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                Cadastrarvoo();
            }
        });
        this.repaint();
        this.revalidate();
        
    }
    public void Listavoos(Vector<String> titulos,Vector<Vector> valores){
        pane.removeAll();
        this.setTitle("Voos");
        //valores = voo.listarVoo();
        tabela = new JTable(valores, titulos);
        tabela.setEnabled(true);
        tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JScrollPane paneTabela = new JScrollPane(tabela);
        tabela.getColumnModel().getColumn(0).setPreferredWidth(60);
        tabela.getColumnModel().getColumn(1).setPreferredWidth(50); 
        tabela.getColumnModel().getColumn(2).setPreferredWidth(50); 
        tabela.getColumnModel().getColumn(3).setPreferredWidth(170); 
        tabela.getColumnModel().getColumn(4).setPreferredWidth(170);
        tabela.getColumnModel().getColumn(5).setPreferredWidth(50); 
        tabela.getColumnModel().getColumn(6).setPreferredWidth(50);
        tabela.getColumnModel().getColumn(7).setPreferredWidth(40); 
        pane.add(paneTabela, BorderLayout.CENTER);
        this.repaint();
        this.revalidate();
        
    }
    
    public void Cadastrarvoo(){
        pane.removeAll();
        this.setTitle("Cadastrar Voo");
        JLabel codigo = new JLabel("Codigo:");
        JLabel origem = new JLabel("Origem:");
        JLabel destino = new JLabel("Destino:");
        JLabel data = new JLabel("Data de partida (dd/mm/YYYY:");
        JLabel horaemin = new JLabel("Hora e minuto de partida(hh:mm):");
        JLabel tempodevoo = new JLabel("Tempo de voo:");
        JLabel preco = new JLabel("Preco:");
        JLabel qtdmaxpass = new JLabel("Quantidade Maxima de passageiros");
        /*try {
            Cod = new JFormattedTextField(new MaskFormatter("???###"));
        } catch (Exception e) {}*/
        Cod = new JTextField(6);
        Cod.addKeyListener(new KeyListener(){
            public void keyTyped(KeyEvent e) {
               if(Cod.getText().length()>=0&&Cod.getText().length()<3){
                   if(!Character.isDigit(e.getKeyChar())){    
                   }else e.consume();
               }else{
                   if(Cod.getText().length()>=3&&Cod.getText().length()<6){
                       if(Character.isDigit(e.getKeyChar())){
                       }else e.consume();
                   }else e.consume();
               }
           
           }
           public void keyPressed(KeyEvent e) {
           }
            public void keyReleased(KeyEvent e) {
            }
            
        });
        Vector<String> origem2 = new Vector<String>();
        origem2 = voo.aeroportos();
        Vector<String> destino2 = new Vector<String>();
        destino2 = voo.aeroportos();
        Origem = new JComboBox(origem2);
        Destino = new JComboBox(destino2);
        try {
            Data = new JFormattedTextField(new MaskFormatter("##/##/####"));
        } catch (ParseException ex) {
            Logger.getLogger(Voos.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            Horaemin = new JFormattedTextField(new MaskFormatter("##:##"));
        } catch (ParseException ex) {
            Logger.getLogger(Voos.class.getName()).log(Level.SEVERE, null, ex);
        }
        Tempodevoo = new JTextField(5);
        Preco = new JTextField(10);
        Qtdmaxpass = new JTextField(4);
        
        
        GridBagConstraints c = new GridBagConstraints();

        pane.setLayout(new GridBagLayout());
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.gridx = 0;
        c.gridy = 0;
        pane.add(codigo,c);
        c.gridy = 1;
        pane.add(origem,c);
        c.gridx= 2;
        pane.add(destino,c);
        c.gridx=0;
        c.gridy=2;
        pane.add(data,c);
        c.gridx=2;
        pane.add(horaemin,c);
        c.gridx=0;
        c.gridy=3;
        pane.add(tempodevoo,c);
        c.gridy=4;
        pane.add(preco,c);
        c.gridy=5;
        pane.add(qtdmaxpass,c);
        c.gridx=1;
        c.gridy=0;
        pane.add(Cod,c);
        c.gridy=1;
        pane.add(Origem,c);
        c.gridx=3;
        pane.add(Destino,c);
        c.gridx=1;
        c.gridy=2;
        pane.add(Data,c);
        c.gridx=3;
        pane.add(Horaemin,c);
        c.gridx=1;
        c.gridy=3;
        pane.add(Tempodevoo,c);
        c.gridy=4;
        pane.add(Preco,c);
        c.gridy=5;
        pane.add(Qtdmaxpass,c);
        c.gridy=6;
        c.gridx=0;
        JButton Cadastrar = new JButton("Cadastrar Voo");
        JButton Limpardados = new JButton("Limpar os campos");
        JButton Sair = new JButton("Sair");
        JPanel aux = new JPanel();
        aux.setLayout(new FlowLayout());
        aux.add(Cadastrar);
        aux.add(Limpardados);
        aux.add(Sair);
        c.gridwidth=3;
        aux.getInsets();
        pane.add(aux,c);
        Cadastrar.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                String s = Data.getText() +" "+ Horaemin.getText();
                if(!(Preco.getText().equals("")||Tempodevoo.getText().equals("")||Qtdmaxpass.getText().equals(""))){
                    if(!Origem.getSelectedItem().equals(Destino.getSelectedItem())){
                        if(DataUtil.validaData(Data.getText())&&DataUtil.validaHora(Horaemin.getText())){
                            if(Cod.getText().length() ==6){
                                if(voo.verificarVoos(s,(String) Origem.getSelectedItem(),(String) Destino.getSelectedItem())){
                                    float a = Float.parseFloat(Preco.getText()); 
                                    if(voo.cadVoo(Cod.getText(),(String) Origem.getSelectedItem(), (String) Destino.getSelectedItem(),s, Integer.parseInt(Tempodevoo.getText()), a , Integer.parseInt(Qtdmaxpass.getText())))Listarvoos();
                                    else JOptionPane.showMessageDialog(null, "Codigo ja usado");
                                }else JOptionPane.showMessageDialog(null,"Ja existe um voo cadastrado desta origem ate o destino nessa data e hora");
                            }else JOptionPane.showMessageDialog(null, "Codigo necessita 3 letras seguidos de 3 numeros");
                        }else JOptionPane.showMessageDialog(null,"Você entrou uma data invalida,  por favor tente novamente!","ERRO!",JOptionPane.ERROR_MESSAGE);
                    }else JOptionPane.showMessageDialog(null, "Voce selecionou o mesmo aeroporto para origem e destino");
                }else JOptionPane.showMessageDialog(null," Algum campo em branco");
            }
        });
        Limpardados.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                Cod.setText(null);
                Origem.setSelectedIndex(0);
                Destino.setSelectedIndex(0);
                Data.setText(null);
                Horaemin.setText(null);
                Tempodevoo.setText(null);
                Preco.setText(null);
                Qtdmaxpass.setText(null);
            }
            
        });
        Sair.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    setClosed(true);
                } catch (PropertyVetoException ex) {
                    Logger.getLogger(Voos.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            
        });
        this.pack();
        this.repaint();
        this.revalidate();
        
    }
    
}
